/**
* @author Eugenia Jose
* @author Fernando Turon
* @version 1.1 15-04-12
*
* La clase RemotoImplementacion proporciona la implementaci�n
*   de la interface RemoteInterface y desarrollo el acceso remoto
*   a algunos m�todos
*
* @see RemotoInterface
*/

package edu.uoc.tds.pec4.server.impl;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.io.Serializable;
import java.util.*;

import javax.swing.JOptionPane;

import edu.uoc.tds.pec4.model.Usuario;
import edu.uoc.tds.pec4.model.Universidad;
import edu.uoc.tds.pec4.common.RemotoInterface;
import edu.uoc.tds.pec4.i18n.GestorIdiomas;
import edu.uoc.tds.pec4.model.Estado;
import edu.uoc.tds.pec4.model.Prueba;
import edu.uoc.tds.pec4.model.Ronda;
import edu.uoc.tds.pec4.model.TipoRonda;
import edu.uoc.tds.pec4.server.bbdd.GestorBBDD;
import edu.uoc.tds.pec4.server.bbdd.GestorEstado;
import edu.uoc.tds.pec4.server.bbdd.GestorPrueba;
import edu.uoc.tds.pec4.server.bbdd.GestorRonda;
import edu.uoc.tds.pec4.server.bbdd.GestorUsuario;
import edu.uoc.tds.pec4.server.bbdd.GestorUniversidad;
import java.sql.Connection;

public class RemotoImplementacion extends UnicastRemoteObject
    implements RemotoInterface, Serializable {

    private static final long serialVersionUID = 10000000L;
    private GestorBBDD gestorBBDD;
    private Connection conexion;

    public RemotoImplementacion() throws RemoteException {
        super();
    }

     //Método que realiza la conexión de la bd
    public void conectaBBDD() throws RemoteException {
        this.gestorBBDD = new GestorBBDD();
        if (!gestorBBDD.conectaBD()) {
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.remotoimpl.conectar.bbdd"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            this.conexion = this.gestorBBDD.getConexion();
        }
    }

    //Método que realiza la desconexión de la bd cuando se desea salir en alguna de las pantallas
    public void desconectaBBDD() throws RemoteException {
        if (!gestorBBDD.desconectaBD()) {
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.remotoimpl.desconectar.bbdd"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }
    }

    public Connection getConexion() throws RemoteException{
        return this.gestorBBDD.getConexion();
    }

    //Valida la existencia de un usuario en la bd a partir del login introducido
    public Usuario validarUsuario(String login, String clave) throws RemoteException {
        GestorUsuario gestorUsuario = new GestorUsuario(this);
        return gestorUsuario.validarUsuario(login, clave);
    }

    public Universidad getUniversidad(int id_universidad) throws RemoteException {
        GestorUniversidad gestorUniversidad = new GestorUniversidad(this);
        return gestorUniversidad.getUniversidad(id_universidad);
    }

    //<<FTM
    public Prueba getPrueba(int id_prueba) throws RemoteException{
        Prueba prueba = null;
        GestorPrueba gestorPrueba = new GestorPrueba(this);
        prueba = gestorPrueba.getPrueba(id_prueba);

        return prueba;
}

    public List<Prueba> getListaPruebas() throws RemoteException{
        List<Prueba> lista = null;
        GestorPrueba gestorPrueba = new GestorPrueba(this);
        lista = gestorPrueba.getListaPruebas();

        return lista;
    }

    public boolean validarPrueba(Prueba prueba) throws RemoteException{
        boolean esValido = false;
        GestorPrueba gestorPrueba = new GestorPrueba(this);
        esValido = gestorPrueba.ValidarPrueba(prueba);

        return esValido;
    }

    public void insertarPrueba(Prueba prueba) throws RemoteException{
        GestorPrueba gestorPrueba = new GestorPrueba(this);
        gestorPrueba.insertarPrueba(prueba);
    }

    public Estado getEstado(int id_estado_prueba) throws RemoteException{
        Estado estado = null;
        GestorEstado gestorEstado = new GestorEstado(this);
        estado = gestorEstado.getEstado(id_estado_prueba);

        return estado;
    }

    public Usuario getUsuario(int id_usuario) throws RemoteException{
        Usuario usuario = null;
        GestorUsuario gestorUsuario = new GestorUsuario(this);
        usuario = gestorUsuario.getUsuario(id_usuario);

        return usuario;
    }

    public void insertarRonda(Ronda ronda, TipoRonda tipoRonda) throws RemoteException{
        GestorRonda gestorRonda = new GestorRonda(this);
        gestorRonda.insertarRonda(ronda, tipoRonda);
    }

    public boolean existeRonda(Ronda ronda, TipoRonda tipoRonda){
        boolean existeRonda = false;
        GestorRonda gestorRonda = new GestorRonda(this);
        gestorRonda.existeRonda(ronda, tipoRonda);

        return existeRonda;
    }

}
